<?php
/**
 * 指令工具入口文件
 * @author  ZhouHaoHua <53027327@qq.com>
 * @package
 */

require('core/config/constant.php');
define('Z_CHARSET_PROJECT', 'utf-8');
define('Z_DEBUG', true);
define('Z_ENV', 'live');
define('Z_DIR', __DIR__);
/**
 * www 网站域名
 */
//define('Z_TOP_WWW',strtolower($_SERVER['HTTP_HOST']));
/**
 * 当前项目所在文件夹
 */
define('Z_APP', __DIR__ . '/artisan');
/**
 * 当前项目的模块文件夹
 */
define('Z_APP_MODELS', Z_APP . '/models');
/**
 * 核心模块文件夹
 */
define('Z_CORE_MODELS', __DIR__ . '/core/models');
/**
 * 日志文件夹
 */
define('Z_LOG_DIR', __DIR__ . '/log');
/**
 * Sessions会话保存的文件夹，只有在用文件方式保存的时候才设置
 */
define('Z_SESSION_DIR', Z_DIR . '/tmp/session');
/**
 * 项目的cookie根目录
 */
define('Z_COOKIE_PATH', '/');
/**
 * 项目的cookie作用域，Cookie 的作用 域。 例如：“www.php.net”。 如果要让 cookie 在所有的子域中都可用，此参数必须以点（.）开头，例如：“.php.net”。
 */
define('Z_COOKIE_DOMAIN', '');
class artisan {
    private $errorSwitch;

    public function __construct() {
        $cgi = php_sapi_name();
        if(stripos($cgi, 'cgi')===false && stripos($cgi,'cli')===false){
            exit('403');
        }
        //配置参数
        require(Z_APP . '/config/config.php');
        $this->errorSwitch = 1;
        // 打开错误显示
        ini_set('display_errors', $this->errorSwitch);
        //设置错误报告级别(E_ALL - 所有的错误和警告  ; E_ERROR - 致命性运行时错  ; E_WARNING - 运行时警告（非致命性错）; E_PARSE - 编译时解析错误  ; E_NOTICE - 运行时提醒(这些经常是是你的代码的bug引起的)
        error_reporting(E_ALL & ~(E_STRICT | E_NOTICE));
        $this->getArgv();
    }

    private function getArgv() {
        $_GET           = $GLOBALS['argv'];
        $ar             = explode(':',$GLOBALS['argv'][1]);
        $_GET['mod']    = trim($ar[0]);
        $_GET['action'] = trim($ar[1]);
        $_GET['project'] = $GLOBALS['argv'][2];
        if(!$_GET['mod'] || !$_GET['action'] || !$_GET['project']){
            exit('Must have mod,action,project');
        }
    }

    /**
     * 执行
     */
    public function run() {
        try {
            //自动载入类处理
            require(Z_CORE_MODELS . '/autoLoad.php');
            spl_autoload_register(array('AutoLoad', 'AutoLoadClass'));
            //配置参数
            //require(Z_APP . '/config/config.php');
            //网站唯一的一个全局变量设置
            $config = new \config();//Z_ENV
            //执行处理
            $A = new \Application($config);
            $A->run();
            //debug_print_backtrace();
        } catch (\Exception $e) {
            header('HTTP/1.1 404 Not Found');
            header('Status: 404 Not Found');
            header('content-type:text/html;charset=' . Z_CHARSET_PROJECT);
            if ($this->errorSwitch == 1) {
                echo '<pre>';
                echo $e->getMessage();
                echo \Z::Strings()->stringToHtmlEntitiles('详细如下：', Z_CHARSET_PROJECT);
                echo '<hr />';
                print_r($e);
                echo '</pre>';
            } else {
                $logFile = Z_LOG_DIR . '/error.log';
                file_put_contents($logFile, 'DATE:' . date('Y-m-d H:i:s') . "\r\nErrorInfo:" . print_r($e, true) . "\r\n\r\n", FILE_APPEND);
            }
        }
    }
}

$I = new \artisan();
$I->run();
exit();

